<?php
class Back_AjaxController extends Osml_Controller_Admin_Action
{

    public function init()
    {
        $this->_helper->layout()->disableLayout();
        $this->_helper->viewRenderer->setNoRender();
        $ajaxContext = $this->_helper->getHelper('AjaxContext');
        $ajaxContext->setAutoJsonSerialization(true);
        $ajaxContext->addActionContext('utilisateur', array(
            'json'
        ))->initContext();
    }

    public function indexAction()
    {
        // action body
    }

    public function recuperationActionParRessourceAction()
    {
        $this->desactivationRendu();
        $request = $this->getRequest();
        $ressource = $request->getParam("ressource", null);
        
        if (is_null($ressource)) {
            $retour = array(
                "code" => "KO", 
                "message" => __("une ressource doit être spécifiée")
            );
            die(json_encode($retour));
        }
        
        list ($module, $controllerNom) = explode(".", $ressource);
        $tmp = ucfirst($controllerNom) . ucfirst($request->getControllerKey());
        if ($module == "front" || $module == "default") {
            $classe = $tmp;
        } else {
            $classe = ucfirst($module) . "_" . $tmp;
        }
        $new = realpath(APPLICATION_PATH . DIRECTORY_SEPARATOR . "modules" . DIRECTORY_SEPARATOR . "$module" . DIRECTORY_SEPARATOR . "controllers" . DIRECTORY_SEPARATOR . $tmp . ".php");
        require_once $new;
        $test = new $classe($request, $this->getResponse());
        $reflection = new ReflectionClass($classe);
        $actions[] = array(
            "value" => "*", 
            "display" => __("Toutes")
        );
        foreach ($reflection->getMethods() as $methode) {
            if (strpos($methode->getName(), "Action") !== false && substr($methode->getName(), 0, 1) != "_") {
                $actionNom = preg_replace("/Action/", "", $methode->getName());
                $actions[] = array(
                    // "value" => $methode->getName(),
                    "value" => $actionNom, 
                    "display" => ucfirst($actionNom)
                );
            }
        }
        $retour = array(
            "code" => "OK", 
            "message" => sprintf(__("%s action(s) trouvées"), count($actions)), 
            "actions" => $actions
        );
        die(json_encode($retour));
    }

    public function gestionLiaisonUtilisateurSaisonAction()
    {
        $this->desactivationRendu();
        $request = $this->getRequest();
        
        $idUtilisateur = $request->getParam("idutilisateur", 0);
        $idSaison = $request->getParam("idsaison", 0);
        if (! is_int($idSaison) && strpos($idSaison, "-") !== false) {
            $idSaison = substr($idSaison, strpos($idSaison, "-") + 1);
        }
        
        if ($idUtilisateur == 0) {
            $json = array(
                "code" => "KO", 
                "message" => __("L'utilisateur est obligatoire pour cette action")
            );
        }
        if ($idSaison == 0) {
            $json = array(
                "code" => "KO", 
                "message" => __("La saison est obligatoire pour cette action")
            );
        }
        
        $idModel = Back_Model_UtilisateurSaison::chercherUtilisateurSaison($idUtilisateur, $idSaison);
        if ($idModel === false) {
            // on a rien trouvé donc on le crée
            $model = new Back_Model_UtilisateurSaison();
            $model->setIdUtilisateur($idUtilisateur);
            $model->setIdSaison($idSaison);
            $flag = $model->sauver();
            
            if ($flag) {
                $json = array(
                    "code" => "OK", 
                    "message" => __("L'opération s'est bien terminée")
                );
            } else {
                $json = array(
                    "code" => "KO", 
                    "message" => __("Enregistrement impossible")
                );
            }
        } else {
            $model = new Back_Model_UtilisateurSaison($idModel);
            $model->supprimer($model->getId());
            
            $saison = new Back_Model_Saisons($idSaison);
            $json = array(
                "code" => "OK", 
                "message" => sprintf(__("L'utilisateur a bien été supprimé de la saison '%s'"), $saison->getNom())
            );
        }
        
        exit(json_encode($json));
    }

    public function utilisateurAction()
    {
        $q = $this->getRequest()->getParam("q", '');
        
        $resultats = Back_Model_Utilisateurs::chercherPourAjax($q);
        $this->view->resultats = $resultats;
    }
}

